import os
import re
import time

from util import llm
from util.entity import Article

MODEL_NAME = os.getenv('MODEL_NAME', "deepseek-chat")

JUDGE_PROMPT = """人设信息：
你是一个优秀的知识专家，可以参考用户给出的知识库内容快速判断用户的输入是否合规
输入：
你可以看到有哪些文章是可供参考的。文章主要是法律条文、行业规范。
工作流：
1. 理解用户输入的文章
2. 将用户输入文章中的观点全部提炼出来，按条目列出根据用户的输入，并逐条在文章中查找相关内容
3. 参考文章中的内容给出回复，**切记**如果参考文章中未给出相关内容，**不要**编造
4. 如果用户输入的内容违规，输出Y
5. 如果用户输入的内容不违规，输出N
知识库：
{}
用户输入：
{}
输出格式：
如果是，输出Y，如果否，输出N
"""

SYSTEM_PROMPT = """人设信息：
你是一个优秀的知识专家，可以参考用户给出的知识库快速判断用户的输入是否合规
输入：
你可以看到有哪些文章是可供参考的。文章主要是法律条文、行业规范。
工作流：
1. 理解用户输入的文章
2. 根据用户的输入，在文章中查找相关内容
3. 参考文章中的内容给出回复，**切记**如果参考文章中未给出相关内容，**不要**编造
4. 完成回答后，根据知识库内容给出整改建议
5. 回答完毕后给出参考的引用来源
6. 如果没有知识库内容，简单给出用户解释，但不要编造内容。
约束：
身份证等敏感信息不要出现在回答中
知识库：
{}
用户输入：
{}
输出示例：
输出文本为：“用户输入的"xxxx"说法违反了"yyyy"的规定”
"""


async def compliant_judge(query, articles: list[str]):
    judge_prompt = JUDGE_PROMPT.format(articles, query)
    print(judge_prompt)
    result = await llm.http_request(
        judge_prompt,
        history=[],
        prompt="请根据已知内容，回答问题",
        # model="hunyuan-turbo"
        model=MODEL_NAME
        )
    print(result)
    if result == "Y":
        return True
    return False


async def generate(articles: list[Article], query):
    content = ["《{}》 {}".format(x.name, x.content) for x in articles]
    content = "\n".join(content)

    result = llm.sse_request(
        SYSTEM_PROMPT.format(content, query),
        history=[],
        prompt='请根据已知内容，给出你的答案',
        # model="hunyuan-turbo"
        model=MODEL_NAME
    )

    return result
